from django.db import models
from rest_framework import serializers

# 地址信息表
class Address(models.Model):
    province = models.CharField(max_length=100, blank=True, null=True)  # 省份
    city = models.CharField(max_length=100, blank=True, null=True)  # 市
    county = models.CharField(max_length=100, blank=True, null=True)  # 县、区
    town = models.CharField(max_length=100, blank=True, null=True)  # 乡、镇
    village = models.CharField(max_length=100, blank=True, null=True)  # 村
    detail = models.CharField(max_length=255, blank=True, null=True)  # 详细信息

    class Meta:
        db_table = 'system_address'

from resource.models import Resource
class AddressSerializer(serializers.ModelSerializer):
    resource_count = serializers.SerializerMethodField()
    class Meta:
        model = Address
        fields = '__all__'

    def get_resource_count(self, obj):
        return len(Resource.objects.all().filter(address=obj.id))

# 角色表
class Role(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50, blank=False, null=False, unique=True, verbose_name="角色名称")  # 角色名称，唯一
    code = models.CharField(max_length=50, null=False, unique=True, verbose_name="角色权限字符串")
    status = models.BooleanField(default=True, verbose_name="帐号状态（1正常 0停用）")
    create_time = models.DateField(null=True, verbose_name="创建时间", )
    update_time = models.DateField(null=True, verbose_name="更新时间")
    remark = models.CharField(max_length=500, null=True, verbose_name="备注")

    def __str__(self):
        return self.name


# 用户表
# 注意：密码字段应存储加密后的密码，实际应用中请使用Django的用户认证系统来处理密码加密和验证。
# 这里为了简化示例，直接使用CharField存储密码。
# 在实际应用中，请使用Django的内置用户模型或自定义用户模型来处理用户认证和密码加密。
class User(models.Model):
    username = models.CharField(max_length=150, blank=False, null=False, unique=True)  # 用户名，唯一
    password = models.CharField(max_length=128, blank=False, null=False, )  # 密码，存储加密后的密码
    phone = models.CharField(max_length=20, blank=False, null=False, unique=True)  # 手机号，唯一
    email = models.EmailField(blank=True, null=True)  # 邮箱，允许为空
    nickname = models.CharField(max_length=50, blank=True, null=True)  # 昵称，允许为空
    role = models.ForeignKey(Role, on_delete=models.PROTECT, null=True, blank=True)  # 角色，外键关联Role表
    status = models.BooleanField(default=True)  # 是否启用，默认启用
    created_time = models.DateTimeField(auto_now_add=True, null=True)  # 创建时间，自动设置为当前时间

    def __str__(self):
        return self.username

class UserSerializer(serializers.ModelSerializer):
    role_name = serializers.StringRelatedField(source='role.name')
    class Meta:
        model = User
        fields = '__all__'